ASP.Net অ্যাপ্লিকেশনে ফাইল আপলোড একটি সাধারণ প্রক্রিয়া হলেও, এটি সঠিকভাবে কনফিগার না করলে নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে। যেমন, বিপজ্জনক ফাইল টাইপ আপলোড করা, ম্যালওয়্যার বা ভাইরাস ধারণ করে এমন ফাইল আপলোড করা, বা সিস্টেমে অতিরিক্ত বড় ফাইল আপলোড করা। সুতরাং, ফাইল আপলোডের সময় কিছু নিরাপত্তা বৈশিষ্ট্য এবং কনফিগারেশন সেট করা অত্যন্ত গুরুত্বপূর্ণ।
ফাইল আপলোডের নিরাপত্তা নিশ্চিত করতে কিছু পদক্ষেপ গ্রহণ করা প্রয়োজন। যেমন ফাইলের ধরণ এবং সাইজ চেক করা, ফাইলের নাম স্যানিটাইজ করা এবং নিরাপদ স্থানে ফাইল সংরক্ষণ করা।
কোনো ফাইল আপলোড করার আগে, আপনাকে নিশ্চিত হতে হবে যে ফাইলটি অনুমোদিত টাইপের। উদাহরণস্বরূপ, আপনি শুধু .jpg, .png, .pdf অথবা অন্যান্য নিরাপদ ফাইল টাইপগুলোর অনুমতি দিতে পারেন।
public bool IsValidFileType(string fileName)
{
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".pdf" };
var extension = Path.GetExtension(fileName).ToLower();
return allowedExtensions.Contains(extension);
}
এখানে, IsValidFileType
মেথড ফাইলের এক্সটেনশন চেক করে, এবং শুধু অনুমোদিত এক্সটেনশনের ফাইলগুলো গ্রহণ করবে।
আপনার অ্যাপ্লিকেশনটি ফাইলের সাইজ সীমিত করার মাধ্যমে অতিরিক্ত বড় ফাইল আপলোড হওয়া থেকে রক্ষা পাবে। এটি সার্ভারের রিসোর্স ব্যবহারের প্রতি নির্ভর করে। আপনি web.config ফাইলে অথবা কোডে ফাইল সাইজ সীমা নির্ধারণ করতে পারেন।
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="110" />
</system.web>
</configuration>
এখানে, maxRequestLength
হলো ফাইল সাইজের সীমা (যেটি কিলোবাইটে নির্ধারিত)। উদাহরণস্বরূপ, 1048576 KB = 1 GB।
public bool IsValidFileSize(long fileSize)
{
const long maxSize = 10 * 1024 * 1024; // 10MB
return fileSize <= maxSize;
}
এখানে, IsValidFileSize
মেথড ফাইল সাইজ চেক করে এবং 10MB এর বেশি ফাইল গ্রহণ করবে না।
ফাইলের নাম দিয়ে কোনও স্ক্রিপ্ট বা কোড ইঞ্জেকশন হতে পারে। তাই, ফাইলের নাম স্যানিটাইজ করা গুরুত্বপূর্ণ। সাধারণত, ফাইলের নামের মধ্যে স্পেস, বিশেষ চিহ্ন বা অক্ষরের উপস্থিতি হতে পারে, যা নিরাপত্তার জন্য ক্ষতিকর।
public string SanitizeFileName(string fileName)
{
var sanitizedFileName = Path.GetFileName(fileName); // Remove any directory path
sanitizedFileName = sanitizedFileName.Replace(" ", "_"); // Replace spaces with underscores
sanitizedFileName = sanitizedFileName.ToLower(); // Convert to lowercase
return sanitizedFileName;
}
এখানে, SanitizeFileName
মেথড ফাইলের নামকে নিরাপদ করে তোলে, যেখানে স্পেস বা কোনো অবাঞ্ছিত অক্ষর নেই।
ফাইল আপলোড করার পর, সেগুলোকে public folder-এ নয়, বরং নিরাপদ জায়গায় সংরক্ষণ করা উচিত। সাধারণত, wwwroot ফোল্ডারটি অ্যাপ্লিকেশনের পাবলিক ফোল্ডার, কিন্তু আপনার ফাইলগুলো নিরাপদ স্থানে রাখতে হবে, যেখানে সেগুলো সরাসরি ওয়েবের মাধ্যমে অ্যাক্সেসযোগ্য হবে না।
public string SaveFile(IFormFile file)
{
var uploadsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Uploads");
if (!Directory.Exists(uploadsDirectory))
{
Directory.CreateDirectory(uploadsDirectory);
}
var fileName = SanitizeFileName(file.FileName);
var filePath = Path.Combine(uploadsDirectory, fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
file.CopyTo(stream);
}
return filePath;
}
এখানে, ফাইল "Uploads" নামক একটি নিরাপদ ডিরেক্টরিতে সংরক্ষণ করা হচ্ছে এবং ফাইলের নাম স্যানিটাইজ করা হয়েছে।
[HttpPost]
public IActionResult UploadFile(IFormFile file)
{
if (file == null || file.Length == 0)
{
return Content("No file selected.");
}
// ফাইল টাইপ যাচাই
if (!IsValidFileType(file.FileName))
{
return Content("Invalid file type.");
}
// ফাইল সাইজ যাচাই
if (!IsValidFileSize(file.Length))
{
return Content("File size exceeds the limit.");
}
// ফাইল স্যানিটাইজ
var filePath = SaveFile(file);
return Content($"File uploaded successfully: {filePath}");
}
এখানে, ফাইলটি আপলোড করার আগে ফাইল টাইপ, ফাইল সাইজ এবং ফাইল নাম স্যানিটাইজ চেক করা হয়েছে।
ফাইল আপলোড নিরাপদভাবে পরিচালনা করার জন্য কিছু গুরুত্বপূর্ণ কনফিগারেশন প্রক্রিয়া রয়েছে:
এই পদক্ষেপগুলো অনুসরণ করে আপনি ASP.Net অ্যাপ্লিকেশনে নিরাপদ ফাইল আপলোড ব্যবস্থা তৈরি করতে পারবেন।
Read more